home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / ugoku / src / movplay / movplayg.c < prev    next >
Text File  |  1994-11-16  |  8KB  |  344 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <file_dlg.h>
  9. #include <egb.h>
  10. #include <mos.h>
  11. #include <snd.h>
  12. #include <vtbios.h>
  13. #include <guidbg.h>
  14. #include "ugoku.h"
  15.  
  16. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  17.  
  18. #define    MinMem (1024*128)    /*    必要とする動作メモリの定義    */
  19.  
  20. /*    アラートメッセージ                        */
  21. static char    *alertStrMem[] = 
  22.                 {"動くざんす:\nメモリが不足しています", "確認"};
  23.  
  24. /*    checkMemFunc関数/alertMemFunc関数の追い越し禁止フラグ    */
  25. static int        checkMemFlag = 0x00 ;
  26.  
  27. /****************************************************************/
  28. /*    メモリ不足時のアラート関数(イベント登録関数)                */
  29. /****************************************************************/
  30. void alertMemFunc()
  31. {
  32.     /*    メモリ不足のアラート表示    */
  33.     MMI_CallMessage(MMI_GetApliId(), GM_ALERT, 
  34.                         AM_ALERT1 | AM_ALERTB0E,(int)alertStrMem) ;
  35.  
  36.     /* checkMemFunc関数/alertMemFunc関数の追い越し禁止解除    */
  37.     checkMemFlag &= 0xef ;
  38. }
  39.  
  40. /****************************************************************/
  41. /*    メモリ開放関数                                                */
  42. /****************************************************************/
  43. int checkMemFunc(useMem)
  44. int    useMem ;
  45. {
  46.     int        ret ;
  47.  
  48.     /*    メモリチェック                    */
  49.     if(TL_checkMemory(1) * 4096 >= useMem)
  50.         return NOERR ;        /*    メモリがあれば正常復帰        */
  51.  
  52.     do
  53.     {
  54.         /*    メモリ開放処理                */
  55.         ret = MMI_CallMessage(MMI_GetApliId(), GM_PURGE, 0, 0) ;
  56.  
  57.         /*    メモリチェック                */
  58.         if(TL_checkMemory(1) * 4096 >= useMem)
  59.             break ;
  60.     } while(ret == NOERR) ;
  61.  
  62.     return    ret ;
  63. }
  64.  
  65. /****************************************************************/
  66. /*    Townsシェル呼び出し関数                                        */
  67. /****************************************************************/
  68. int userFunc(aplId, messId, info, data)
  69. int        aplId ;
  70. int        messId ;
  71. int        info ;
  72. int        data ;
  73. {
  74.     register int    ret ;
  75.     int                sw ;
  76.     POOLDATA        *ptr ;
  77.  
  78.     ret = ILLEGAL_FUNCTION ;
  79.  
  80.     switch (messId)
  81.     {
  82.         case    GM_WAKE :
  83.         {
  84.             EVENT    ev ;
  85.  
  86.             /*    一時的にビデオモードをOFF    */
  87.             if( VTBIOS_getStatus() == 1  )
  88.             {
  89.                 VTBIOS_videoOFF() ;
  90.                 EGB_resolution(guiEgbPtr,1,10);
  91.                 EGB_resolution(guiEgbPtr,0,3);
  92.                 setPalette( guiEgbPtr ) ;
  93.             }
  94.  
  95.             /*    checkMemFunc関数の追い越し禁止判定            */
  96.             if(checkMemFlag & 0x01)
  97.                 break ;
  98.  
  99.             /*    動作メモリのチェック                        */
  100.             /*    checkMemFunc関数の追い越し禁止        */
  101.             checkMemFlag |= 0x01 ;
  102.             if(checkMemFunc(MinMem) != NOERR)
  103.             {
  104.                 /*    alertMemFunc関数の追い越し禁止    */
  105.                 checkMemFlag |= 0x10 ;
  106.                 /*    メモリ不足の場合はアラート処理関数をイベント登録する    */
  107.                 MMI_FlushEvnt() ;
  108.                 ev.what = EVEXEC ;
  109.                 ev.shift = 0 ;
  110.                 ev.info = (int)alertMemFunc ;
  111.                 MMI_SetEvnt(&ev) ;
  112.                 break ;
  113.             }
  114.  
  115.             extern int wakeSet() ;
  116.  
  117.             wakeSet() ;
  118.             break ;
  119.         }
  120.  
  121.         case    GM_SLEEP :
  122.         {
  123.             /* alertMemFunc関数がイベント登録されてなければ、checkMemFunc関数
  124.                 の追い越し禁止解除                                            */
  125.             if((checkMemFlag & 0x10) == 0x00)
  126.                 checkMemFlag &= 0xfe ;
  127.  
  128.             extern int sleepSet() ;
  129.  
  130.             sleepSet() ;
  131.             break ;
  132.         }
  133.  
  134.         case    GM_QUIT :
  135.         {
  136.             extern int quitFunc2() ;
  137.  
  138.             ret = quitFunc2() ;
  139.             break ;
  140.         }
  141.  
  142.     }
  143.     return ret ;
  144.  
  145. }
  146.  
  147. void main( ac, av )
  148. char ac,*av[];
  149. {
  150.     extern int APL_init() ;
  151.     extern int p_for_bach( char, char ** ) ;
  152.  
  153.     MMICTRL ctrl ;
  154.     int kobj ;
  155.  
  156.     /*    初期化処理    */
  157.     ctrl.page0 = 3 ;
  158.     ctrl.page1 = 10 ;
  159.     ctrl.writePage = 0 ;
  160.     ctrl.displayPage = 3 ;
  161.     ctrl.priority = 0 ;
  162.  
  163.     ctrl.mode = 0 ;
  164.     ctrl.width = 512 ;
  165.     ctrl.size = 0 ;
  166.     ctrl.ptr = NULL ;
  167.     ctrl.asize = 0 ;
  168.     ctrl.aptr = NULL ;
  169.     ctrl.fr.lupx = 0 ;
  170.     ctrl.fr.lupy = 0 ;
  171.     ctrl.fr.rdwx = 639 ;
  172.     ctrl.fr.rdwy = 479 ;
  173.     ctrl.move.lupx = 0 ;
  174.     ctrl.move.lupy = 20 ;    /*    ダイアログの移動範囲に制限を付ける(y座標)    */
  175.     ctrl.move.rdwx = 639 ;
  176.     ctrl.move.rdwy = 479 ;
  177.     ctrl.white = 15 ;
  178.     ctrl.black = 8 ;        /*    パレット変更に伴いGUIの表示色を変更(黒)        */
  179.     ctrl.gray = 7 ;            /*                 〃                    (灰色)    */
  180.     ctrl.xor = 7 ;            /*                 〃                    (反転色)    */
  181.  
  182.     /*    二重起動のチェック        */
  183.     kobj = MMI_CallMessage(MMI_GetApliId(),    GM_QUERYID, QM_KIND, 1) ;
  184.  
  185.     if( (kobj > NOERR) && (ac > 1) )    /* もう1つの自分を消す */
  186.     {
  187.         MMI_CallMessage( kobj, GM_QUIT, 0, 0 ); 
  188.         goto start ;
  189.     }
  190.     if( (kobj > NOERR) && (ac <= 1) )    /* 自分自身を消す */
  191.     {
  192.         MMI_CallMessage(MMI_GetApliId(), GM_SWITCH, FALSE, kobj) ;
  193.         goto end ;
  194.     }
  195.  
  196. start:
  197.     /*    初期化処理                */
  198.     if (MMI_Open( &ctrl ) == NOERR)
  199.     {
  200.         /*    初期化に成功すればメインループに入る.    */
  201.         if (APL_init() == NOERR)
  202.         {
  203.             /*    動作メモリのチェック    */
  204.             /*    checkMemFunc関数の追い越し禁止    */
  205.             checkMemFlag |= 0x01 ;
  206.             if(checkMemFunc(MinMem) != NOERR)
  207.             {
  208.                 /*    alertMemFunc関数の追い越し禁止    */
  209.                 checkMemFlag |= 0x10 ;
  210.                 alertMemFunc();            /*    メモリ不足のアラート表示    */
  211.             }
  212.             /*    checkMemFunc関数の追い越し禁止解除    */
  213.             checkMemFlag &= 0xfe ;
  214.  
  215.             FDG_SaveCurDir() ;        /*    カレントディレクトリ保存    */
  216.             FDG_InitFileDlg() ;        /*    ファイルダイアログ初期化    */
  217.  
  218.             /*    一時的にビデオモードをOFF    */
  219.             if( VTBIOS_getStatus() == 1  )
  220.             {
  221.                 VTBIOS_videoOFF() ;
  222.                 EGB_resolution(guiEgbPtr,1,10);
  223.                 EGB_resolution(guiEgbPtr,0,3);
  224.                 setPalette( guiEgbPtr ) ;
  225.             }
  226.  
  227.             if( ac >= 2 )            /*  バッチ処理                    */
  228.                 p_for_bach( ac, av ) ;
  229.  
  230.             MMI_ExecSystem() ;        /*    メインのイベントループ        */
  231.  
  232.             FDG_FreeFileDlg() ;        /*    ファイルダイアログ終了処理    */
  233.             FDG_RecovCurDir() ;        /*    カレントディレクトリ復元    */
  234.  
  235.             MMI_SendMessage(MMI_GetSleepObj(), MM_SLEEP, 0) ;
  236.             MMI_SetWakeObj(UNUSED);
  237.         }
  238.         /*    終了処理                */
  239.         MMI_Close() ;
  240.     }
  241.  
  242. end:
  243.     return ;
  244. }
  245.  
  246. int APL_init()
  247. {
  248.     extern int        setPalette( char * ) ;    /*    パレット設定関数    */
  249.     extern int        mouseDsp( int ) ;        /*    マウス表示関数        */
  250.     extern MMIINIT    initDataIMVABOU2 ;
  251.     extern MMIINIT    initDataIMVDSK ;
  252.     extern MMIINIT    initDataIMVERR ;
  253.     extern MMIINIT    initDataIMVSET ;
  254.     extern int        mItemId[3] ;
  255.  
  256.     register int    ret ;
  257.  
  258.     /*    EGB ワークアドレスの取得.    */
  259.     guiEgbPtr = MMI_GetEgbPtr() ;
  260.  
  261.     /*    ハイパ型部品の初期化            */
  262.     if ((ret = MMI_initHyper()) < 0)
  263.         return ret ;
  264.     /*    リストメニュー型部品の初期化    */
  265.     if ((ret = MMI_initListMenuL40()) < 0)
  266.         return ret ;
  267.     /*    ダイアログ型部品の初期化        */
  268.     if ((ret = MMI_initDialogL40()) < 0)
  269.         return ret ;
  270.     /*    アラート型部品の初期化            */
  271.     if ((ret = MMI_initAlertL40()) < 0)
  272.         return ret ;
  273.     /*    ウインドウ型部品の初期化        */
  274.     if ((ret = MMI_initWindowL40()) < 0)
  275.         return ret ;
  276.     /*    メッセージ型部品の初期化        */
  277.     if ((ret = MMI_initMessageL40()) < 0)
  278.         return ret ;
  279.     /*    メニュー型部品の初期化            */
  280.     if ((ret = MMI_initMenuL40()) < 0)
  281.         return ret ;
  282.     /*    ボタン型部品の初期化            */
  283.     if ((ret = MMI_initButtonL40()) < 0)
  284.         return ret ;
  285.     /*    ドロウボタン型部品の初期化        */
  286.     if ((ret = MMI_initDrawButtonL40()) < 0)
  287.         return ret ;
  288.     /*    アイコンボタン型部品の初期化    */
  289.     if ((ret = MMI_initIconL40()) < 0)
  290.         return ret ;
  291.     /*    トグルアイコン型部品の初期化    */
  292.     if ((ret = MMI_initToggleIconL40()) < 0)
  293.         return ret ;
  294.     /*    メニューアイテム型部品の初期化    */
  295.     if ((ret = MMI_initMenuItemL40()) < 0)
  296.         return ret ;
  297.     /*    スクロール型部品の初期化        */
  298.     if ((ret = MMI_initScrollBarL40()) < 0)
  299.         return ret ;
  300.     /*    テキスト型部品の初期化            */
  301.     if ((ret = MMI_initTextL40()) < 0)
  302.         return ret ;
  303.     /*    数値入力型部品の初期化            */
  304.     if ((ret = MMI_initNumBoxL40()) < 0)
  305.         return ret ;
  306.  
  307.     /*    パレット変更・・・・2画面使用の影響を受けるため */
  308.     ret = setPalette( guiEgbPtr ) ;
  309.  
  310.     /*    マウスカーソル表示関数の変更・・・・2画面使用の影響を受けるため */
  311.     MMI_SetPtrFunc( mouseDsp ) ;
  312.  
  313.     /*    背景データの初期化                        */
  314.  
  315.     /*    データの登録        */
  316.     if ((ret = MMI_Init(&initDataIMVABOU2)) < 0)
  317.         return ret ;
  318.  
  319.     if ((ret = MMI_Init(&initDataIMVDSK)) < 0)
  320.         return ret ;
  321.  
  322.     if ((ret = MMI_Init(&initDataIMVERR)) < 0)
  323.         return ret ;
  324.  
  325.     if ((ret = MMI_Init(&initDataIMVSET)) < 0)
  326.         return ret ;
  327.  
  328.     /*    タスクリストとサイドワークメニューを登録する    */
  329.     MMI_SetUpPrgMenu( mItemId[0], 2 ) ;
  330.     MMI_SetUpSDKMenu( mItemId[0], 4 ) ;
  331.  
  332.     /*    呼び出し関数を登録する    */
  333.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc) ;
  334.  
  335.     /*    アプリケーション名を登録する    */
  336.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"動くざんす", 0) ;
  337.  
  338.     /*    背景を表示する                            */
  339.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  340.  
  341.     return NOERR ;
  342. }
  343.  
  344.